package com.songtech.lottery.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.songtech.base.core.common.HttpClientResult;
import com.songtech.base.core.common.JsonResult;
import com.songtech.base.core.util.HttpClientUtils;
import com.songtech.base.core.util.RequestUtil;
import com.songtech.base.core.util.TimeUtil;
import com.songtech.base.core.util.UuidUtil;
import com.songtech.lottery.config.WxConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * Created with IntelliJ IDEA.
 * Description: 微信工具类
 *
 * @Author: RenTie
 * @Date: 2018-12-12 10:30
 **/
@Component
public class WxUtil {

    @Autowired
    private WxConfig wxConfig;

    private static WxConfig wxConfiger;

    private static Logger logger = LoggerFactory.getLogger(WxUtil.class);

    @PostConstruct
    public void init() {
        wxConfiger = wxConfig;
    }

    /**
     * 通过code换取网页授权access_token，openid等信息
     * @param code code
     * @return
     *    access_token	网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
     *    expires_in	access_token接口调用凭证超时时间，单位（秒）
     *    refresh_token	用户刷新access_token
     *    openid	用户唯一标识，请注意，在未关注公众号时，用户访问公众号的网页，也会产生一个用户和公众号唯一的OpenID
     *    scope	用户授权的作用域，使用逗号（,）分隔
     * @throws Exception
     */
    public static JSONObject getWxAccess(String code) throws Exception{
        StringBuffer stringBuffer = new StringBuffer("https://api.weixin.qq.com/sns/oauth2/access_token?appid=");
        stringBuffer.append(wxConfiger.getAppid());
        stringBuffer.append("&secret=");
        stringBuffer.append(wxConfiger.getAppsecret());
        stringBuffer.append("&code=");
        stringBuffer.append(code);
        stringBuffer.append("&grant_type=authorization_code");

        HttpClientResult result = HttpClientUtils.doGet(stringBuffer.toString());

        String content = result.getContent();

        logger.info("微信网页授权信息获取结果:"+content);

        //转为json对象方便操作
        JSONObject jsonObject = JSON.parseObject(content);

        if (jsonObject.containsKey("openid")) {
            return jsonObject;
        } else {
            logger.error("获取微信网页授权信息异常:" + jsonObject.getString("errmsg"));
            return null;
        }
    }

    /**
     * 获取微信公众号用户信息
     * @param accessToken 公众号 网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
     *                     通过上面getWxAccess方法可以获得
     * @param openId 用户openId
     * @return
     *  openid	用户的唯一标识
     *  nickname	用户昵称
     *  sex	用户的性别，值为1时是男性，值为2时是女性，值为0时是未知
     *  province	用户个人资料填写的省份
     *  city	普通用户个人资料填写的城市
     *  country	国家，如中国为CN
     *  headimgurl	用户头像，最后一个数值代表正方形头像大小（有0、46、64、96、132数值可选，0代表640*640正方形头像），用户没有头像时该项为空。若用户更换头像，原有头像URL将失效。
     *  privilege	用户特权信息，json 数组，如微信沃卡用户为（chinaunicom）
     *  unionid	只有在用户将公众号绑定到微信开放平台帐号后，才会出现该字段。
     */
    public static JSONObject getWxUserInfo(String accessToken,String openId){
        StringBuffer stringBuffer = new StringBuffer("https://api.weixin.qq.com/sns/userinfo?access_token=");
        stringBuffer.append(accessToken);
        stringBuffer.append("&openid=");
        stringBuffer.append(openId);
        stringBuffer.append("&lang=zh_CN");

        HttpClientResult result = null;
        try {
            result = HttpClientUtils.doGet(stringBuffer.toString());
        } catch (Exception e) {
            logger.error("获取微信用户信息异常:",e);
        }
        JSONObject jsonObject = JSON.parseObject(result.getContent());
        if (jsonObject.containsKey("openid")) {
            return jsonObject;
        } else {
            logger.error("获取微信用户信息错误:" + jsonObject.getString("errmsg"));
            return null;
        }

    }
}
